/*********************************************************
This class is the most complicated nonlinear compuatational unit which has
one sequence of composite vents, one intermediate single vent and a single vent.
The ID of this class is "D".
The class maintains the method that depends its own configuraton
to calculate its output.
*********************************************************/
#pragma once
#ifndef _TypeDNCU
#define _TypeDNCU
#include <algorithm>
#include "TypeBNCU.h"
#include "TypeCNCU.h"
#include "Misc.h"
#include "NCUGenomeSet.h"
class TypeDNCU:public TypeBNCU, public TypeCNCU
{
public:
	// constructors
	TypeDNCU();
	TypeDNCU(const unsigned int &config);
	TypeDNCU(const unsigned int &config, const vector<double> &paras);
	TypeDNCU(const TypeDNCU &rhs);
	// destructor
	virtual ~TypeDNCU();
	// operator assignment
	TypeDNCU& operator=(const TypeDNCU &rhs);
	/*********************************************
	Configuration Section
	*********************************************/
	// get the number of parameters of a NCU
	virtual const unsigned int number() const;
	/*********************************************
	Parameters Section
	*********************************************/
	// assign all parametrs of a NCU
	virtual bool parameters(const vector<double> &paras);
	// get all parameters of a NCU
	virtual vector< double> parameters() const;
	// virtual constructor
	virtual GeneralNCU* clone() const;
	// simulation and update the current sill
	virtual outputPair simulation(const double &input);
	// get the genome informatoin
	virtual vector<const GenomeType*> genome() const;
};
#endif